home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
modula2
/
module
/
randomiz.mod
< prev
next >
Wrap
Text File
|
1995-11-25
|
1KB
|
47 lines
IMPLEMENTATION MODULE Randomize;
FROM XBIOS104 IMPORT Random;
FROM MathBase IMPORT real;
FROM SYSTEM IMPORT VAL;
VAR seed1,seed2,seed3 :INTEGER;
PROCEDURE random(Grenze:LONGINT):LONGINT;
BEGIN
RETURN ABS(VAL(LONGINT,Random())MOD Grenze);
END random;
PROCEDURE rnd(x:INTEGER):INTEGER;
BEGIN
x:=ABS(VAL(INTEGER,Random()) MOD x);
RETURN x;
END rnd;
PROCEDURE RanEcu():REAL;
(* Ein portierbarer Pseudozufallszahlengenerator für 16-BIT INTEGER
Arithmetik nach Pierre L'Ecuyer -> ct5/94 *)
VAR z,k:INTEGER;
BEGIN
k:=seed1 DIV 206;
seed1:=157*(seed1-k*206)-k*21;
IF seed1<0 THEN seed1:=seed1+32363;END(*IF*);
k:=seed2 DIV 217;
seed2:=146*(seed2-k*217)-k*45;
IF seed2<0 THEN seed2:=seed2+31727;END(*IF*);
k:=seed3 DIV 222;
seed3:=142*(seed3-k*222)-k*133;
IF seed3<0 THEN seed3:=seed3+31657; END(*IF*);
z:=seed1-seed2;
IF z>706 THEN z:=z-32362;END(*IF*);
z:=z+seed3;
IF z<1 THEN z:=z+32362; END(*IF*);
RETURN real(z)*3.0899E-5;
END RanEcu;
BEGIN
seed1:=rnd(32361)+1;
seed2:=rnd(31724)+1;
seed3:=rnd(31655)+1;
END Randomize.